package com.gitee.qdbp.general.common.api.sequence.model;

import java.util.Date;
import com.gitee.qdbp.base.annotation.DataIsolation;
import com.gitee.qdbp.base.annotation.OperateTraces;

/**
 * 复杂序列号实体类
 *
 * @author zhh
 * @version 170722
 */
@OperateTraces(id = "id", desc = "name")
@DataIsolation(enable = false)
public class StrongSequenceBean extends StrongSequenceRule {

    /** 版本序列号 **/
    private static final long serialVersionUID = 1L;

    /** 表名 **/
    public static final String TABLE = "sys_strong_sequence";

    /** 主键 **/
    private String id;

    /** 类型 **/
    private String type;

    /** 子类型 **/
    private String subtype;

    /** 选项 **/
    private StrongSequenceOptions options;

    /** 创建时间 **/
    private Date createTime;

    /** 获取主键 **/
    public String getId() {
        return id;
    }

    /** 设置主键 **/
    public void setId(String id) {
        this.id = id;
    }

    /** 获取类型 **/
    public String getType() {
        return type;
    }

    /** 设置类型 **/
    public void setType(String type) {
        this.type = type;
    }

    /** 获取子类型 **/
    public String getSubtype() {
        return subtype;
    }

    /** 设置子类型 **/
    public void setSubtype(String subtype) {
        this.subtype = subtype;
    }

    /** 获取选项 **/
    public StrongSequenceOptions getOptions() {
        return options;
    }

    /** 获取选项, force=是否强制返回非空对象 **/
    public StrongSequenceOptions getOptions(boolean force) {
        if (options == null && force) {
            options = new StrongSequenceOptions();
        }
        return options;
    }

    /** 设置选项 **/
    public void setOptions(StrongSequenceOptions options) {
        this.options = options;
    }

    /** 获取创建时间 **/
    public Date getCreateTime() {
        return createTime;
    }

    /** 设置创建时间 **/
    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    /**
     * 将当前对象转换为子类对象
     *
     * @param clazz 目标类型
     * @return 目标对象
     */
    public <T extends StrongSequenceRule> T to(Class<T> clazz) {
        T instance = super.to(clazz);

        if (instance instanceof StrongSequenceBean) {
            StrongSequenceBean real = (StrongSequenceBean) instance;
            real.setId(this.getId()); // 主键
            real.setType(this.getType()); // 类型
            real.setSubtype(this.getSubtype()); // 子类型
            real.setCreateTime(this.getCreateTime()); // 创建时间
        }

        return instance;
    }

}
